[FEConf] ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ, ์–ด๋ ต์ง€ ์•Š์•„์š”!

[FEConf] ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ, ์–ด๋ ต์ง€ ์•Š์•„์š”!

ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ ์ด์•ผ๊ธฐ์ง€๋งŒ, ๋ถ„์•ผ๋ฅผ ๋„˜์–ด์„œ ์˜คํ”ˆ์†Œ์Šค ์ „์ฒด์ ์ธ ์ƒํƒœ๊ณ„์— ๊ด€ํ•œ ์ด์•ผ๊ธฐ์˜ˆ์š”.

โ€ข9๋ถ„

๋“ค์–ด๊ฐ€๋ฉฐ

ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ ์ด์•ผ๊ธฐ์ง€๋งŒ, ๋ถ„์•ผ๋ฅผ ๋„˜์–ด์„œ ์˜คํ”ˆ์†Œ์Šค ์ „์ฒด์ ์ธ ์ƒํƒœ๊ณ„์— ๊ด€ํ•œ ์ด์•ผ๊ธฐ์˜ˆ์š”.

์ €๋Š” ์ง€๊ธˆ๊นŒ์ง€ suspensive, @tanstack/query, pnpm ๋“ฑ ๋‹ค์–‘ํ•œ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๋Š” ํ™œ๋™์„ ํ•ด์™”์–ด์š”. ์ด๋Ÿฌํ•œ ์ €์˜ ๊ฒฝํ—˜์„ ๋ฐ”ํƒ•์œผ๋กœ ์˜คํ”ˆ์†Œ์Šค ํ™œ๋™์„ ์™œ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜์—ˆ๋Š”์ง€, ์˜คํ”ˆ์†Œ์Šค๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ป๊ฒŒ ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋“ฑ ์˜คํ”ˆ์†Œ์Šค ์ƒํƒœ๊ณ„์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ์—ฌ๋Ÿฌ๋ถ„๊ณผ ๋‚˜๋ˆ„๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๋‹น ๊ธ€์„ ํ†ตํ•ด ํ•œ ๋ฒˆ๋„ ๊ธฐ์—ฌ๋ฅผ ํ•ด๋ณธ ์ ์ด ์—†๋Š” ๋ถ„๋“ค์—๊ฒŒ๋Š” ๊ด€์‹ฌ๊ณผ ์šฉ๊ธฐ๋ฅผ ๋“œ๋ฆฌ๊ณ  ์‹ถ๊ณ , ๊ธฐ์กด์— ๊ธฐ์—ฌ๋ฅผ ํ•ด๋ณธ ์ ์ด ์žˆ๋Š” ๋ถ„๋“ค์—๊ฒŒ๋Š” ์ €์˜ ๊ฒฝํ—˜๊ณผ ๋…ธํ•˜์šฐ๋ฅผ ๊ณต์œ ํ•˜๊ณ ์ž ํ•ด์š”. ์—ฌ๋Ÿฌ๋ถ„์˜ ์˜คํ”ˆ์†Œ์Šค ์—ฌ์ •์„ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ๋ฐœ์ „์‹œํ‚ค๋Š” ๋ฐ ์ธ์‚ฌ์ดํŠธ๋ฅผ ์–ป๋Š” ์‹œ๊ฐ„์ด ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

์˜คํ”ˆ์†Œ์Šค๊ฐ€ ๋ญ”๊ฐ€์š”?

slide4

๋ณธ๊ฒฉ์ ์œผ๋กœ ์ œ ๊ฒฝํ—˜์„ ์ด์•ผ๊ธฐํ•˜๊ธฐ ์ „์—, ๋จผ์ € ์˜คํ”ˆ์†Œ์Šค๊ฐ€ ๋ฌด์—‡์ธ์ง€๋ถ€ํ„ฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ดํŽด๋ณผ ๊ฑฐ์˜ˆ์š”.

์šฐ๋ฆฌ๊ฐ€ ์›น์„ ๊ฐœ๋ฐœ์„ ํ•  ๋•Œ, ์–ด๋–ค ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ํ•œ๋ฒˆ ๋– ์˜ฌ๋ ค ๋ณผ๊นŒ์š”? ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋ผ๋ฉด React๋‚˜ Vue ์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋– ์˜ฌ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์š”์ฆ˜์€ Next.js๋„ ๋น ์งˆ ์ˆ˜ ์—†์ฃ . ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ์ˆ ์„ ๋„˜์–ด, ๊ฐœ๋ฐœ์„ ๊ตฌ์„ฑํ•˜๋Š” ์š”์†Œ๋“ค JavaScript์™€ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด, ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” Git๋„ ๋น ์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ๋“ค์ด ์šฐ๋ฆฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์„ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ์ฃ .

์šฐ๋ฆฌ๊ฐ€ ์ผ์ƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์ด ๊ธฐ์ˆ ๋“ค์€ ๋ชจ๋‘ ์˜คํ”ˆ์†Œ์Šค์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์˜คํ”ˆ์†Œ์Šค๋ž€, ์†Œํ”„ํŠธ์›จ์–ด์˜ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๊ณต๊ฐœ๋˜์–ด ์žˆ์–ด ๋ˆ„๊ตฌ๋‚˜ ์ ‘๊ทผํ•˜๊ณ , ์ด๋ฅผ ํ™œ์šฉํ•ด ๊ฐœ๋ฐœํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ์†Œํ”„ํŠธ์›จ์–ด(์ฝ”๋“œ)๋ฅผ ๋งํ•ด์š”. ์ฆ‰, ์šฐ๋ฆฌ๋Š” ๊ณต๊ฐœ๋œ ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•ด ๊ฐœ๋ฐœ์„ ํ•˜๊ณ  ์žˆ๋Š” ์…ˆ์ž…๋‹ˆ๋‹ค.

slide5

ํ•œ ๋ฒˆ ์ƒ์ƒํ•ด ๋ณผ๊นŒ์š”? ๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๋น„๊ณต๊ฐœ(Closed)์˜€๋‹ค๋ฉด ์–ด๋• ์„๊นŒ์š”? React๋‚˜ Vue๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์„ธ์ƒ์ด๋ผ๋ฉด, ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ JQuery๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์„์ง€๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ JQuery ์กฐ์ฐจ ์˜คํ”ˆ์†Œ์Šค๊ฐ€ ์•„๋‹ˆ์—ˆ๋‹ค๋ฉด, ํŠน์ • ํšŒ์‚ฌ๊ฐ€ ๋ผ์ด์„ผ์Šค๋ฅผ ๋…์ ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค๋ฉด ์ง€๊ธˆ์˜ ๊ธฐ์ˆ  ๋ฐœ์ „์ด ์žˆ์—ˆ์„๊นŒ์š”? ์•„๋งˆ๋„ ํ˜„์žฌ์˜ ๋ชจ์Šต๊ณผ๋Š” ๋งŽ์ด ๋‹ค๋ฅธ ๋ชจ์Šต์ผ ๊ฒƒ ๊ฐ™์•„์š”. ์ด์ฒ˜๋Ÿผ ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ์ˆ ์€ ์˜คํ”ˆ์†Œ์Šค ์ƒํƒœ๊ณ„๋ฅผ ํ†ตํ•ด ๋ฐœ์ „์„ ์ด๋ค˜๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”.

์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ ๋ฐฉ๋ฒ•

slide6

์˜คํ”ˆ์†Œ์Šค๊ฐ€ ๋ญ”์ง€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ดค๋Š”๋ฐ์š”, ๋‹ค์Œ์œผ๋กœ๋Š” ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ๋Š” ์–ด๋–ค ๊ฒƒ์ธ์ง€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ดํŽด๋ณผ ๊ฑฐ์˜ˆ์š”.

์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ๋ž€ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์˜ ๋ฐœ์ „๊ณผ ๊ฐœ์„ ์„ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ฐธ์—ฌํ•˜๊ณ  ๋„์›€์„ ์ฃผ๋Š” ํ™œ๋™์„ ๋งํ•ด์š”. ์ด ๊ธฐ์—ฌ๋Š” ๋‹จ์ˆœํžˆ ์ฝ”๋“œ ์ž‘์„ฑ์—๋งŒ ๊ตญํ•œ๋˜์ง€ ์•Š๊ณ , ๋ฌธ์„œ ์ž‘์„ฑ, ์˜ค๋ฅ˜ ๋ณด๊ณ , ๋ฒˆ์—ญ ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํ˜•ํƒœ๋กœ ์ด๋ค„์งˆ ์ˆ˜ ์žˆ์–ด์š”.

์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ๋ผ๋Š” ๋ง์„ ๋“ค์œผ๋ฉด ํ”ํžˆ ๋ณต์žกํ•œ ์ž‘์—…์ด๋‚˜ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๋Š” ํฐ ์ž‘์—…์„ ๋– ์˜ฌ๋ฆฌ๊ธฐ ์‰ฌ์›Œ์š”. ๋ฌผ๋ก  ๊ทธ๋Ÿฐ ๊ธฐ์—ฌ๋„ ์ค‘์š”ํ•˜์ง€๋งŒ, ์˜คํ”ˆ์†Œ์Šค์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์ƒ๊ฐ๋ณด๋‹ค ํ›จ์”ฌ ๋‹ค์–‘ํ•˜๊ณ  ๊ฐ„๋‹จํ•  ์ˆ˜ ์žˆ์–ด์š”. ์˜คํƒ€๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ, ๋ฌธ์„œ๋ฅผ ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๊ฐœ์„ ํ•˜๋Š” ๊ฒƒ, ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž๋“ค์ด ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ๋ฒˆ์—ญํ•˜๋Š” ๊ฒƒ ๋“ฑ ์ด ๋ชจ๋“  ๊ฒƒ๋“ค์ด ์ค‘์š”ํ•œ ๊ธฐ์—ฌ์˜ˆ์š”.

์˜คํ”ˆ์†Œ์Šค๋ฅผ ๊ธฐ์—ฌํ•œ 2๊ฐ€์ง€ ๊ฒฝํ—˜

์•ž์„œ ๋ง์”€๋“œ๋ ธ๋“ฏ์ด, ์˜คํ”ˆ์†Œ์Šค์— ๊ธฐ์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋งค์šฐ ๋‹ค์–‘ํ•ด์š”. ์—ฌ๋Ÿฌ๋ถ„๋“ค์—๊ฒŒ ์ด์•ผ๊ธฐํ•˜๋ฉฐ ๊ธฐ์—ฌ ๊ณผ์ •์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ 2๊ฐœ์˜ ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ ๊ฒฝํ—˜์„ ๊ฐ€์ ธ์™”์–ด์š”.

์ฒซ ๋ฒˆ์งธ, ์˜คํ”ˆ์†Œ์Šค ๋ฉ”์ธํ…Œ์ด๋„ˆ(Maintainer)์—๊ฒŒ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ œ์•ˆํ•˜์—ฌ ์„ค๋“ํ•˜๊ณ  ๊ธฐ์—ฌํ•œ ๊ฒฝํ—˜์ด๊ณ , ๋‘ ๋ฒˆ์งธ๋Š” ๊ฐœ๋ฐœ ์ค‘์— ๋ฐœ๊ฒฌํ•œ ๋ฒ„๊ทธ๋ฅผ ๊ฐœ์„ ํ•˜๊ณ  ๊ธฐ์—ฌํ•œ ๊ฒฝํ—˜์ด์—์š”.

์ฒซ ๋ฒˆ์งธ, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ œ์•ˆํ•˜์—ฌ ๊ธฐ์—ฌํ•œ ๊ฒฝํ—˜

slide8

์ €๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ๋ฌธ์„œํ™”ํ•  ๋•Œ ์ฃผ๋กœ VitePress๋ฅผ ์‚ฌ์šฉํ•ด์š”. VitePress๋Š” Vue ๊ธฐ๋ฐ˜์œผ๋กœ ์ •์  ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋กœ Vite, Rollup ๋“ฑ ์—ฌ๋Ÿฌ ๊ทœ๋ชจ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๊ณต์‹ ๋ฌธ์„œ ์ž‘์„ฑ์— ํ™œ์šฉ๋˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด์—์š”.

slide10

์ œ๊ฐ€ ๊ฐœ๋ฐœํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์€ ํ•ญ์ƒ NPM์„ ํ†ตํ•ด ๋ฐฐํฌ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ฌธ์„œ์˜ Nav Social Links์— NPM ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ ์ž ํ–ˆ์–ด์š”. ๊ทธ๋Ÿฐ๋ฐ discord, facebook, github, instagram ๋“ฑ ๋‹ค์–‘ํ•œ ์†Œ์…œ ๋งํฌ ์˜ต์…˜์ด ์ œ๊ณต๋˜๊ณ  ์žˆ์—ˆ์ง€๋งŒ, NPM ๋งํฌ๋Š” ์—†๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ ๋์–ด์š”. VitePress๊ฐ€ ์ฃผ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ณต์‹ ๋ฌธ์„œ๋กœ ์‚ฌ์šฉ๋œ๋‹ค๋Š” ์ ์—์„œ NPM ๋งํฌ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์€ ๋ถˆํŽธํ•œ ์ผ์ด์—ˆ์ฃ .

๋ฌผ๋ก , ์ปค์Šคํ…€ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด NPM ๋กœ๊ณ  ์ด๋ฏธ์ง€๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๊ธด ํ•ด์š”. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ฐฉ์‹์€ ๋ฒˆ๊ฑฐ๋กœ์›Œ์š”. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ๋งˆ๋‹ค NPM ๋กœ๊ณ ๋ฅผ ์ปค์Šคํ…€์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—…์„ ๋ฐ˜๋ณตํ•ด์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด์—์š”. ๊ทธ๋ž˜์„œ ์ €๋Š” ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ง์ ‘ ๊ธฐ์—ฌ๋ฅผ ํ•ด๋ณด๊ธฐ๋กœ ๊ฒฐ์‹ฌํ–ˆ์–ด์š”.

์ด์ฒ˜๋Ÿผ ๋ถ„๋ช… ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ถˆํŽธํ•œ ์  ํ˜น์€ ๊ฐœ์„ ํ•˜๋ฉด ์ข‹์€ ์ ์ด ์žˆ์„๊ฑฐ์˜ˆ์š”, ์–ด๋ ค๋ถ„๋“ค๋„ ๋ง์ด์ฃ .

slide12

ํ•˜์ง€๋งŒ, ์ €์™€ ๊ฐ™์€ ์ƒ๊ฐ์„ ๊ฐ€์ง„ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋“ค๋„ ์ด๋ฏธ ๋น„์Šทํ•œ ์‹œ๋„๋ฅผ ํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋์–ด์š”. NPM๋ฟ๋งŒ ์•„๋‹ˆ๋ผ GitLab, Reddit, TikTok ๋“ฑ ๋‹ค๋ฅธ ์†Œ์…œ ๋งํฌ๋„ ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ์‹œ๋„๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ, ๋ฉ”์ธํ…Œ์ด๋„ˆ๊ฐ€ ์ด๋ฅผ ๊ฑฐ์ ˆํ•œ ์ด๋ ฅ์ด ์žˆ์–ด์š”. ๋ฉ”์ธํ…Œ์ด๋„ˆ๋Š” ์ปค์Šคํ…€ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ์š”๊ตฌ๋ฅผ ์ถฉ์กฑ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•ด ์ƒˆ๋กœ์šด ์†Œ์…œ ๋งํฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋˜ ๊ฑฐ์˜ˆ์š”.

๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ์ €๋Š” NPM์ด ๋‹ค๋ฅธ ์†Œ์…œ ๋งํฌ์™€๋Š” ๋‹ค๋ฅด๋‹ค๊ณ  ์ƒ๊ฐ์„ ํ–ˆ์–ด์š”. NPM์€ ๋‹จ์ˆœํ•œ ์†Œ์…œ ๋งํฌ๊ฐ€ ์•„๋‹ˆ๋ผ, ๋Œ€๋ถ€๋ถ„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ฐฐํฌ๋˜๋Š” ํ”Œ๋žซํผ์œผ๋กœ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ์‹ค์งˆ์ ์ธ ๊ฐ€์น˜ ํ˜น์€ ์‚ฌ์šฉ์„ฑ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์–ด์š”. ๊ทธ๋ž˜์„œ ์ €๋Š” ํฌ๊ธฐํ•˜์ง€ ์•Š๊ณ  Github Issue๋ฅผ ์ƒ์„ฑํ•ด NPM ํ…Œ๋งˆ๊ฐ€ ์™œ ํ•„์š”ํ•œ์ง€์— ๋Œ€ํ•ด ๋…ผ๋ฆฌ์ ์œผ๋กœ ์„ค๋“ํ•˜๊ณ ์ž ํ–ˆ์–ด์š”.

์ด์ฒ˜๋Ÿผ ๋ถˆํŽธํ•œ ์  ํ˜น์€ ๊ฐœ์„ ํ•˜๊ณ ์ž ํ•˜๋Š” ์ ์„ ์ œ๋ณด, ์ œ๊ธฐํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

slide13

ํ•ด๋‹น ์ด์Šˆ์—๋Š” โ€œ๋Œ€๋ถ€๋ถ„์˜ NPM ํŒจํ‚ค์ง€(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)๋ฅผ ๋ฌธ์„œํ™”ํ•˜๋Š”๋ฐ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์œผ๋ฉฐ, NPM์„ ๊ณต์‹์ ์œผ๋กœ ํฌํ•จํ•˜๋ฉด ์‚ฌ์šฉ์ž ๋ชจ๋‘์—๊ฒŒ ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.โ€œ๋ผ๋Š” ํ•ต์‹ฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ด์•˜์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ด ์ž‘์—…์„ ์–ด๋–ป๊ฒŒ ์ง„ํ–‰ํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•ด ์„ค๋ช…ํ–ˆ์–ด์š”.

๊ฒฐ๊ตญ, ์ €์˜ ์š”์ฒญ์€ ๋ฐ›์•„๋“ค์—ฌ์กŒ๊ณ , contribution welcome ๋ผ๋ฒจ์ด ๋‹ฌ๋ฆฐ ์ด์Šˆ๋กœ ์Šน์ธ์„ ๋ฐ›๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋น„๋ก ๋ฉ”์ธํ…Œ์ด๋„ˆ๊ฐ€ ์ฒ˜์Œ์—๋Š” ์ถ”๊ฐ€ ์†Œ์…œ ๋งํฌ ์˜ต์…˜์„ ๋” ์ด์ƒ ๋ฐ›์ง€ ์•Š๊ฒ ๋‹ค๊ณ  ํ–ˆ์ง€๋งŒ, NPM์˜ ์ค‘์š”์„ฑ์„ ๊ฐ•์กฐํ•˜๋ฉฐ ์ด์Šˆ๋ฅผ ์ƒ์„ฑํ•œ ๊ฒฐ๊ณผ, ์„ค๋“ํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ  ๊ธฐ์—ฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์—ˆ์–ด์š”.

์ด์ฒ˜๋Ÿผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ถˆํŽธํ•œ์  ๊ฐœ์„  ์ ์„ ๋ฐœ๊ฒฌํ•ด๋ณด์‹ ์ ์ด ์žˆ์œผ์‹ค ๊ฑฐ์—์š”

slide17

ํ•ด๋‹น ๊ฒฝํ—˜์„ ํ†ตํ•ด์„œ ์ž์‹ ์žˆ๊ฒŒ, ์˜๊ฒฌ์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ „๋‹ฌํ•˜๊ณ  ๋„์ „ํ•˜๋Š” ๊ฒƒ

์ด ๊ฒฝํ—˜์€ ํฌ๊ธฐํ•˜์ง€ ์•Š๊ณ  ์ž์‹ ์˜ ์˜๊ฒฌ์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•œ์ง€ ๊นจ๋‹ซ๊ฒŒ ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์ž‘์€ ๋ถˆํŽธ์—์„œ ์‹œ์ž‘๋œ ๊ธฐ์—ฌ๊ฐ€ ๋งŽ์€ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ์‹ค์งˆ์ ์ธ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ , ์ด๋Š” ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ์˜ ํฐ ๋ณด๋žŒ ์ค‘ ํ•˜๋‚˜๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ, ๊ฐœ๋ฐœ ์ค‘ ๋ฐœ๊ฒฌํ•œ ๋ฒ„๊ทธ๋ฅผ ๊ฐœ์„ ํ•˜๊ณ  ๊ธฐ์—ฌํ•œ ๊ฒฝํ—˜

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ์— ํ•„์š”ํ•œ ์ •๋ณด(ํžŒํŠธ) ์ฐพ๊ธฐ

์—ฌ๋Ÿฌ๋ถ„๋„ ๊ฐœ๋ฐœ ์ค‘ ์˜๋„ํ•˜์ง€ ์•Š์€ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•ด ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…์„ ํ•˜๋‹ค, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž์ฒด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฒ„๊ทธ์ž„์„ ๋ฐœ๊ฒฌํ•œ ๊ฒฝํ—˜์ด ์žˆ์„๊ฑฐ์˜ˆ์š”. ํฐ ๊ทœ๋ชจ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ์ด๋Ÿฐ ๋ฒ„๊ทธ๊ฐ€ ์žˆ๊ธฐ ๋งˆ๋ จ์ธ๋ฐ์š”, ์ € ์—ญ์‹œ TanStack Query๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ฒ„๊ทธ๋ฅผ ๋งˆ์ฃผ์น˜๊ฒŒ ๋˜์—ˆ๊ณ , ์ด๋ฅผ ๊ฐœ์„ ํ•ด ๊ธฐ์—ฌํ–ˆ๋˜ ๊ฒฝํ—˜์ด ์žˆ์–ด์š”.

์ด ๋ฒ„๊ทธ๋Š” ๋™์•„๋ฆฌ ํ”„๋กœ์ ํŠธ์—์„œ TanStack Query์˜ useQueries๋ฅผ ์‚ฌ์šฉํ•ด ์–ด๋“œ๋ฏผ ํŽ˜์ด์ง€๋ฅผ ๊ฐœ๋ฐœํ•˜๋˜ ์ค‘ ๋ฐœ๊ฒฌํ•˜๊ฒŒ ๋˜์—ˆ์–ด์š”.

// ์ผ์ •์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
export const useSchedule = ({ isNotAdmin }: UseScheduleParams) => {
return useQueries({
queries: [
{
queryKey: QUERY_KEY.SCHEDULE,
queryFn: () => getSchedule, // is Data
},
{
// ํ•ด๋‹น ์ผ์ • ์ •๋ณด๋Š” ์–ด๋“œ๋ฏผ์—๊ฒŒ๋งŒ ์ œ๊ณต ๋ฉ๋‹ˆ๋‹ค.
queryKey: QUERY_KEY.NOTICE.ADMIN,
queryFn: isNotAdmin
? skipToken // ์–ด๋“œ๋ฏผ์ด ์•„๋‹ ๊ฒฝ์šฐ ํ•ด๋‹น ์ฟผ๋ฆฌ๋ฅผ ๋น„ํ™œ์„ฑํ™”
: () => getAdminSchedule(), // is unknown
},
],
});
};

์œ„ ์ฝ”๋“œ๋Š” ์šด์˜์ง„(์–ด๋“œ๋ฏผ)์—๊ฒŒ๋งŒ ์ผ์ • ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด skipToken์„ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ๊ฑด๋ถ€๋กœ ๊ฐ€์ ธ์˜ค๋„๋ก ๋ถ„๊ธฐ์ฒ˜๋ฆฌํ•œ ์ฝ”๋“œ์˜ˆ์š”. ๊ทธ๋Ÿฌ๋‚˜ useQueries์—์„œ skipToken์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ˜ํ™˜๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํƒ€์ž…์ด unknown์œผ๋กœ ์ถ”๋ก ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์–ด์š”.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„๊ทธ๋กœ ์˜์‹ฌ์„ ์•ˆํ–ˆ์„๋•Œ ๋””๋ฒ„๊น…ํ•˜๋Š” ์—„์ฒญ๋‚œ ์‹œ๊ฐ„์„ ์†Œ๋ชจํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทœ๋ชจ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๋„ ์˜์‹ฌ์ด ํ•„์š”ํ•ด์š”

๋‹ค๋ฅธ ํ›…์—์„œ๋„ ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•œ ๊ฒฐ๊ณผ, skipToken์„ ์‚ฌ์šฉํ•  ๋•Œ ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค๋Š” ๊ฒฐ๋ก ์— ์ด๋ฅด๋ €์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ์ œ๊ฐ€ useQueries๋ฅผ ์ž˜๋ชป ์‚ฌ์šฉํ•œ ๊ฒƒ์ด ์•„๋‹Œ๊ฐ€ ์‹ถ์–ด ์‚ดํŽด๋ณด์•˜์ง€๋งŒ, ๋ฌธ์ œ์ ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์—†์—ˆ์–ด์š”. ์ด๋กœ์ธํ•ด ์—„์ฒญ๋‚œ ์‹œ๊ฐ„์ด ์†Œ์š”๋์–ด์š”.

slide20

๋งŽ์€ ์‹œ๊ฐ„์„ ์‚ฌ์šฉํ•ด์„œ์•ผ ๋ฒ„๊ทธ๋กœ ์˜์‹ฌํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด GitHub Issue๋ฅผ ์‚ดํŽด๋ดค์–ด์š”. 3์›” 6์ผ, ์ด๋ฏธ ์ด ๋ฒ„๊ทธ๊ฐ€ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž์— ์˜ํ•ด ๋ณด๊ณ ๋œ ์ƒํƒœ์˜€๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋ฌธ์ œ์ ์„ ํŒŒ์•…ํ•˜์—ฌ skipToken์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ฒŒ ๋์–ด์š”.

ํ•˜์ง€๋งŒ, ์—ฌ๊ธฐ์„œ ๋๋‚ด๋ฉด ์ €์˜ ๋ฌธ์ œ๋งŒ ์ž„์‹œ์ ์œผ๋กœ ํ•ด๊ฒฐํ•œ๊ฑฐ์—์š”, ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž ๋ชจ๋‘๊ฐ€ ๊ฒช์„ ์ˆ˜ ์žˆ๊ณ , ๊ฐœ์„  ํ•„์š”์„ฑ์„ ๋А๊ผˆ์–ด์š”.

๋กœ์ปฌ ํ™˜๊ฒฝ์— ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์—ด์–ด๋ณธ ์ˆœ๊ฐ„, ๋ฐฉ๋Œ€ํ•œ ์ฝ”๋“œ์™€ ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ์— ๊นœ์ง ๋†€๋ž์Šต๋‹ˆ๋‹ค. ์ด ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋Š” ์ˆ˜๋งŽ์€ ํŒจํ‚ค์ง€๊ฐ€ ๋ชจ๋…ธ๋ ˆํฌ(Monorepo)๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์—ˆ๊ณ , Vue, Svelte, Solid, React, Angular ๋“ฑ ์—ฌ๋Ÿฌ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์–ด๋Œ‘ํ„ฐ ํ˜•์‹์œผ๋กœ ์ง€์›ํ•˜๋Š” ์—„์ฒญ๋‚œ ๊ทœ๋ชจ์˜€์Šต๋‹ˆ๋‹ค.

์–ด๋””์„œ๋ถ€ํ„ฐ ๋ด์•ผ ํ• ์ง€ ๋ง‰๋ง‰ํ–ˆ์ง€๋งŒ, ๋ฌธ์ œ๋Š” useQueries ํƒ€์ž… ์ถ”๋ก ์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ , ๊ด€๋ จ๋œ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ์„ ์œ„ํ•ด ๋‹จ์ˆœํžˆ ๊ฐ€์„ค์„ ์„ธ์šฐ๊ณ  ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ๊ณต๋ถ€ํ•˜๊ณ ์ž ํ–ˆ์–ด์š”. ์ด๋Š” ์˜คํ”ˆ์†Œ์Šค ๋ฌธ์ œํ•ด๊ฒฐ์„ ์œ„ํ•œ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ์˜€์–ด์š”.

// useQueries ํƒ€์ž… ์ถ”๋ก ์— ๋Œ€ํ•œ ์ฝ”๋“œ ์ผ๋ถ€
/**
* QueriesOptions reducer recursively unwraps function arguments to infer/enforce type param
*/
export type QueriesOptions<
T extends Array<any>,
TResults extends Array<any> = [],
TDepth extends ReadonlyArray<number> = [],
> = TDepth['length'] extends MAXIMUM_DEPTH
? Array<UseQueryOptionsForUseQueries>
: T extends []
? []
: T extends [infer Head]
? [...TResults, GetUseQueryOptionsForUseQueries<Head>]
: T extends [infer Head, ...infer Tails]
? QueriesOptions<
[...Tails],
[...TResults, GetUseQueryOptionsForUseQueries<Head>],
[...TDepth, 1]
>
: Array<unknown> extends T
? T
: // If T is *some* array but we couldn't assign unknown[] to it, then it must hold some known/homogenous type!
// use this to infer the param types in the case of Array.map() argument
T extends Array<
UseQueryOptionsForUseQueries<
infer TQueryFnData,
infer TError,
infer TData,
infer TQueryKey
>
>
? Array<
UseQueryOptionsForUseQueries<
TQueryFnData,
TError,
TData,
TQueryKey
>
>
: // Fallback
Array<UseQueryOptionsForUseQueries>;

์–ด๋–ค๊ฐ€์š”? ์ฝ”๋“œ๋งŒ ๋ด๋„ ์‰ฝ์ง€ ์•Š๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์ฃ ? ์ €๋„ ๊ทธ๋žฌ์Šต๋‹ˆ๋‹ค. useQueries๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋งŒ ์ต์ˆ™ํ–ˆ๋˜ ์ €๋กœ์„œ๋Š”, ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ์˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ํƒ€์ž… ์„ ์–ธ์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ์–ด์š”.

๊ทœ๋ชจ๊ฐ€ ํฐ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋Š” ๊ธฐ์กด ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ดํ•ดํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์ƒ๋‹นํ•œ ์‹œ๊ฐ„์ด ์†Œ๋ชจ๋  ์ˆ˜ ์žˆ์–ด์š”. ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ฒƒ์€ **โ€œํžŒํŠธ ์ฐพ๊ธฐโ€**์˜ˆ์š”. ๋น„์Šทํ•œ ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ๋Š”์ง€, ์ด์ „์— ๋ˆ„๊ตฐ๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ์‹œ๋„ํ•œ ๊ธฐ๋ก์ด ์žˆ๋Š”์ง€, ๋˜๋Š” ๋ฉ”์ธํ…Œ์ด๋„ˆ๊ฐ€ ๋‚จ๊ธด ์œ ์šฉํ•œ ๋Œ“๊ธ€์ด ์žˆ๋Š”์ง€๋ฅผ ์ฐพ์•„๋ณด๋Š” ๊ฒƒ์ด์ฃ .

slide20

์ด์ „์— ์ด์™€ ์œ ์‚ฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ•œ PR์„ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ์–ด์š”. as const๋ฅผ ์‚ฌ์šฉํ•ด ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์„ ์–ธํ•˜๋ฉด ํƒ€์ž… ์ถ”๋ก ์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ •๋ณด๋ฅผ ์–ป์—ˆ์ฃ . ์—ฌ๊ธฐ์„œ ํžŒํŠธ๋ฅผ ์–ป์–ด, ์ €๋Š” useQueries ๋‚ด๋ถ€์—์„œ ์ด ์›๋ฆฌ๋ฅผ ์ ์šฉํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์–ด์š”.

slide21

๊ฒฐ๊ณผ์ ์œผ๋กœ๋Š” ๋‹จ ํ•œ ์ค„ ์ˆ˜์ •์œผ๋กœ ์ด ๋ฒ„๊ทธ๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์—ˆ์–ด์š”. ๋Œ์•„๋ณด๋ฉด, ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ์˜€์ง€๋งŒ, ๊ทธ ๊ณผ์ •์—์„œ ๋ฌธ์ œ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋ชจ์œผ๋Š” ๊ณผ์ •์ด ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•œ์ง€ ๊นจ๋‹ฌ์•˜์–ด์š”.

์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ๋กœ ์„ฑ์žฅํ•œ ์ 

slide23

์ง€๊ธˆ๊นŒ์ง€ ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ ํ™œ๋™์„ ํ•˜๋ฉด์„œ ์ฃผ๋ณ€ ๋ถ„๋“ค์—๊ฒŒ ์—ฌ๋Ÿฌ ์งˆ๋ฌธ์„ ๋ฐ›์•˜์–ด์š”. ๊ทธ ์ค‘์—์„œ ์ œ์ผ ๋น„์ค‘์ด ๋†’์€ ์งˆ๋ฌธ์€ โ€œ๊ทธ๋ž˜์„œ ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌํ•˜๋ฉด ์–ป๋Š” ๊ฒŒ ๋ญ”๊ฐ€์š”?โ€๋ผ๋Š” ์งˆ๋ฌธ์ด์—์š”. ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ ํ™œ๋™์„ ํ†ตํ•ด ์ œ๊ฐ€ ์–ป์€ ๊ธฐ์ˆ ์ ์ธ ์„ฑ์žฅ๊ณผ ๊ฐœ์ธ์ ์ธ ์„ฑ์žฅ์„ ์ด์•ผ๊ธฐํ•ด๋ณด๊ณ ์ž ํ•ด์š”.

๊ธฐ์ˆ ์ ์ธ ์„ฑ์žฅ

์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ์˜ ๊ฐ€์žฅ ํฐ ์žฅ์  ์ค‘ ํ•˜๋‚˜๋Š” ๋‚ด๊ฐ€ ๊ธฐ์—ฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด ๊นŠ์ด ์žˆ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์—์„œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋งค์ปค๋‹ˆ์ฆ˜, ๊ตฌ์กฐ, ๊ทธ๋ฆฌ๊ณ  ๋‚ด๋ถ€ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ํŒŒ์•…ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝํ—˜์€ ๋‹จ์ˆœํžˆ ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž์—์„œ ๋ฒ—์–ด๋‚˜, ๊ทธ๊ฒƒ์„ ์ดํ•ดํ•˜๊ณ  ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€์œผ๋กœ ๊ธฐ์ˆ  ์—ญ๋Ÿ‰์„ ๋ฐœ์ „ํ•  ์ˆ˜ ์žˆ์–ด์š”.

๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์„ ๊ฐ„์ ‘์ ์œผ๋กœ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, TanStack Query์— ๊ธฐ์—ฌํ•˜๋ฉด์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋‚ด๋ถ€ ๋™์ž‘๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋ชจ๋…ธ๋ ˆํฌ ์•„ํ‚คํ…์ณ, ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ, NX CI์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ฐ ๋„๊ตฌ๋“ค์„ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ์—ˆ์–ด์š”. ์ด๋Ÿฌํ•œ ๊ฒฝํ—˜์€ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ์ดํ•ด๋„๋ฅผ ๋†’์ด๊ณ , ๋‹ค์–‘ํ•œ ๋„๊ตฌ์™€ ํ™˜๊ฒฝ์—์„œ ์ž‘์—…ํ•˜๋Š” ๊ฒฝํ—˜์„ ํ•  ์ˆ˜ ์žˆ์—ˆ์–ด์š”.

๊ฐœ์ธ์ ์ธ ์„ฑ์žฅ

์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ๋ฅผ ํ†ตํ•ด ์–ป์€ ๊ฒƒ์€ ๊ธฐ์ˆ ์ ์ธ ์„ฑ์žฅ๋ฟ๋งŒ์ด ์•„๋‹ˆ๋ผ ๊ฐœ์ธ์ ์œผ๋กœ๋„ ๋งŽ์€ ์„ฑ์žฅ์„ ์ด๋ค˜์–ด์š”.

์ฒซ์งธ๋กœ, ๋ฌธ์ œ ํ•ด๊ฒฐ ๋Šฅ๋ ฅ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋‚ด๊ฐ€ ํ•ด๊ฒฐํ•ด์•ผ ํ•  ๋ฌธ์ œ๊ฐ€ ๋ช…ํ™•ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜, ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๋ณต์žกํ•œ ๋ฌธ์ œ๋“ค์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์—์„œ ๋…ผ๋ฆฌ์  ์‚ฌ๊ณ ์™€ ์ฐฝ์˜์ ์ธ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์„ ๊ธฐ๋ฅด๊ฒŒ ๋˜์—ˆ์–ด์š”.

๋‘˜์งธ๋กœ, ์ž์‹ ๊ฐ์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋‚ด๊ฐ€ ์ด ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ์„๊นŒ ํ•˜๋Š” ๋‘๋ ค์›€์ด ์žˆ์—ˆ์ง€๋งŒ, ์ž‘์€ ๊ธฐ์—ฌ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์ ์ฐจ ๋” ํฐ ๊ธฐ์—ฌ๋กœ ์ด์–ด์ง€๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ๋‚˜๋„ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ž์‹ ๊ฐ์„ ์–ป๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ž์‹ ๊ฐ์€ ์ƒˆ๋กœ์šด ๋„์ „์— ๋Œ€ํ•œ ๋‘๋ ค์›€์„ ๊ทน๋ณตํ•˜๊ณ , ๋” ํฐ ๋ชฉํ‘œ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•˜๊ฒŒ ์ž‘์šฉํ–ˆ์–ด์š”.

๋งˆ์น˜๋ฉฐ

slide24

์˜คํ”ˆ์†Œ์Šค์— ๊ธฐ์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ •๋ง ๋‹ค์–‘ํ•ด์š”. ๋‹จ์ˆœํžˆ ๋ฒ„๊ทธ๋ฅผ ๊ฐœ์„ ํ•˜๊ฑฐ๋‚˜ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋Š” ๊ฒƒ์— ๊ทธ์น˜์ง€ ์•Š๊ณ , ๋ฌธ์„œ ์ž‘์„ฑ, ์˜ค๋ฅ˜ ์ œ๋ณด, ๋ฌธ์„œ ๋ฒˆ์—ญ ๋“ฑ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ์–ด์š”. ์ด๋Ÿฌํ•œ ๊ธฐ์—ฌ๋Š” ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ์ˆ ์  ํ–ฅ์ƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์ปค๋ฎค๋‹ˆํ‹ฐ ์ „์ฒด์˜ ๋ฐœ์ „์—๋„ ํฐ ๊ธฐ์—ฌ๋ฅผ ํ•˜๊ฒŒ๋ผ์š”.

๊ฐœ๋ฐœ ์ค‘์— ๋ฐœ์ƒํ•˜๋Š” ๋ฒ„๊ทธ๊ฐ€ ๋‹จ์ˆœํžˆ ๋‚˜์˜ ์‹ค์ˆ˜๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ์‰ฌ์šธ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋•Œ๋กœ๋Š” ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž์ฒด์˜ ๋ฌธ์ œ์ผ ๊ฐ€๋Šฅ์„ฑ๋„ ์žˆ์–ด์š”. ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ์‹ ๋ขฐ๊ฐ€ ํฌ๋‹ค ๋ณด๋‹ˆ, "๋‚ด๊ฐ€ ๋ญ”๊ฐ€ ์ž˜๋ชปํ–ˆ๊ฒ ์ง€"๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋•Œ๋กœ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์˜์‹ฌํ•˜๊ณ  ๊ฒ€ํ† ํ•ด๋ณด๋Š” ๋‹จ๊ณ„๋„ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”.

์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ์— ๋Œ€ํ•ด ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ์ž์‹  ์žˆ๊ฒŒ ๋„์ „ํ•˜๊ธฐ
  • ํ•ด๋‹น ๊ฒฝํ—˜์„ ํ†ตํ•ด์„œ ์ž์‹ ์žˆ๊ฒŒ, ์˜๊ฒฌ์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ „๋‹ฌํ•˜๊ณ  ๋„์ „ํ•˜๋Š” ๊ฒƒ
  • ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ์— ํ•„์š”ํ•œ ์ •๋ณด(ํžŒํŠธ) ์ฐพ๊ธฐ

์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ๋ฅผ ๋” ์‰ฝ๊ณ  ์žฌ๋ฏธ์žˆ๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๊ธฐ์—ฌํ•˜๊ธฐ

์ž์‹ ์ด ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๊ธฐ์—ฌํ•ด๋ณด์„ธ์š”. ์ด๋ฏธ ๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ๋ฐฐ๊ฒฝ ์ง€์‹์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ธฐ์—ฌ ํ™œ๋™์ด ๋” ์‰ฝ๊ณ  ์ฆ๊ฒ๊ฒŒ ๋А๊ปด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ, ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‚˜ ์ต์ˆ™ํ•œ ์˜์—ญ์—์„œ ๊ฐœ์„ ์ ์„ ์ฐพ๋Š”๋‹ค๋ฉด ๋” ํฐ ๋™๊ธฐ๋ถ€์—ฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ์–ด์š”.

  • ์ž‘์€ ๊ธฐ์—ฌ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด๋ณด๊ธฐ

๊ธฐ์—ฌ๋Š” ๋ฐ˜๋“œ์‹œ ํฐ ๋ณ€ํ™”๋‚˜ ๋ณต์žกํ•œ ์ฝ”๋“œ ์ž‘์„ฑ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์˜คํƒ€ ์ˆ˜์ •, ๋งํฌ ์ˆ˜์ •, ํ•œ๊ตญ์–ด ๋ฒˆ์—ญ ๋“ฑ ๋ฌธ์„œ์—์„œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์€ ๊ธฐ์—ฌ๋„ ๋งค์šฐ ์ค‘์š”ํ•ด์š”. ๋˜ํ•œ, ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์ด๋‚˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ฐœ์„ ๊ณผ ๊ฐ™์€ ์ž‘์—…๋„ ํ›Œ๋ฅญํ•œ ๊ธฐ์—ฌ์˜ˆ์š”. ์ž‘์€ ๊ธฐ์—ฌ๋Š” ์ฒซ๊ฑธ์Œ์ด ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ ์ฐจ ๋” ํฐ ์—ญํ• ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์–ด์š”.

  • ์˜์‹ฌํ•˜์ง€ ์•Š๊ธฐ

"์‚ฌ์†Œํ•œ ๊ธฐ์—ฌ์ธ๋ฐ ์˜๋ฏธ๊ฐ€ ์žˆ์„๊นŒ?", "๋ณ„๊ฒƒ ์•„๋‹Œ๋ฐ ์ด๋Ÿฐ ๊ธฐ์—ฌ๊ฐ€ ํ•„์š”ํ• ๊นŒ?", "๋‚ด ๊ธฐ์—ฌ๋ฅผ ๋ฐ›์•„์ฃผ์ง€ ์•Š์œผ๋ฉด ์–ด๋–กํ•˜์ง€?" ๋“ฑ์˜ ๊ฑฑ์ •์€ ํ•˜์ง€ ์•Š์•„๋„ ๋ผ์š”. ์˜คํ”ˆ์†Œ์Šค ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ๋Š” ์ž‘์€ ๊ธฐ์—ฌ๋‚˜ ์‹œ๋„, ๊ด€์‹ฌ์ด ๋ชจ๋‘ ์†Œ์ค‘ํ•˜๊ณ  ์ค‘์š”ํ•ด์š”. ๋ชจ๋“  ๊ธฐ์—ฌ๋Š” ํ™˜์˜๋ฐ›๊ณ , ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ๋Š” ํฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์–ด์š”.

์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ๋Š” ์—ฌ๋Ÿฌ๋ถ„๋„ ์ง€๊ธˆ ๋‹น์žฅ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ž‘์€ ๊ธฐ์—ฌ๋ผ๋„ ์‹œ์ž‘ํ•ด ๋ณด๋Š” ๊ฑด ์–ด๋–จ๊นŒ์š”? ์ด๋ฅผ ํ†ตํ•ด ์˜คํ”ˆ์†Œ์Šค ์ƒํƒœ๊ณ„์— ๊ธฐ์—ฌํ•จ๊ณผ ๋™์‹œ์—, ์ž์‹ ์„ ์„ฑ์žฅ์‹œํ‚ค๋Š” ์†Œ์ค‘ํ•œ ๊ฒฝํ—˜์„ ์Œ“์„ ์ˆ˜ ์žˆ์„ ๊ฑฐ์˜ˆ์š”.

ํ•œ๊ตญ์˜ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ

slide25

ํ•œ๊ตญ์˜ ๊ธฐ์—…, ๋‹จ์ฒด, ํ˜น์€ ๊ฐœ์ธ์ด ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋Š” ํ”„๋ก ํŠธ์—”๋“œ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋ฅผ ์†Œ๊ฐœํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋“ค์€ ํ˜„์žฌ ํ™œ๋ฐœํ•˜๊ฒŒ ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ, ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌ๋ฅผ ์ ๊ทน์ ์œผ๋กœ ์ˆ˜์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„๋„ ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•˜๊ณ  ๋„์ „ํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.